# 前面我们都是通过def来定义的函数都有名字。
# 但有些时候，函数功能很简单，没必要定义函数名和用return来返回结果，那次是就可以通过Lambda表达式来定义匿名函数，达到简化代码的效果

# 求和
from functools import cmp_to_key, reduce


add = lambda a,b,c:a+b+c
print(add(1,2,3))

# 计算奇数 + filter
nums = [1,2,3,4,5,6,7]
print(list(filter(lambda num: num%2!=0, nums)))

# 平方
print(list(map(lambda num: num ** 2, nums)))

# 累计 求和
print(reduce(lambda x,y: x+y, nums))

# 奇怪的排序
print(sorted(nums, key=cmp_to_key(lambda x,y: abs(y)-abs(x)) ))


# lambda表达式除了能定义匿名函数之外，另一个用法是把函数当作“输入参数”，那次是这个参数就是“高级函数”
# 高阶函数
def add(x,y,func):
  return func(x) + func(y)
print(add(2,4, lambda a: a*a))
